from flask import *
from src import log, mysql_db as db
from src.model.model import MelonCase
from src import utils

blueprint = Blueprint('melon', __name__)


@blueprint.route('/api/melon/addCase', methods=['POST'])
def addCase():
    data_dict = json.loads(request.get_data(as_text=True))
    if not data_dict:
        return jsonify({'code': '', 'message': "未收到参数", 'success': False, 'data': None})

    case_id = data_dict['data']['caseId']
    case_name = data_dict['data']['caseName']
    case_input = data_dict['data']['caseInput']
    case_output_expected = data_dict['data']['caseOutputExpected']

    now_time = utils.get_YmdHMS()
    # 更新数据
    if data_dict['isUpdate']:
        row_data = db.session.query(MelonCase).filter(MelonCase.case_id == case_id).update(
            {MelonCase.case_name: case_name,
             MelonCase.case_input: case_input, MelonCase.case_output_expected: case_output_expected,
             MelonCase.case_output_real: None, MelonCase.is_pass: None, MelonCase.update_time: now_time})
        if row_data:
            db.session.commit()
            return jsonify({'code': '', 'message': '提交成功', 'success': True, 'data': None})
    # 新增数据
    else:
        row_data = db.session.query(MelonCase).filter(MelonCase.case_id == case_id, MelonCase.yn == 1).all()
        if row_data:
            return jsonify({'code': '', 'message': '唯一键重复，请修改用例编号重新提交', 'success': False, 'data': None})

        db_data = MelonCase(dt=utils.get_Ymd(), case_id=case_id, case_name=case_name, case_input=case_input,
                            case_output_expected=case_output_expected, case_output_real=None, is_pass=None, yn=1,
                            create_time=now_time, update_time=now_time)
        db.session.add(db_data)
        db.session.commit()
        return jsonify({'code': '', 'message': '提交成功', 'success': True, 'data': None})


@blueprint.route('/api/melon/searchCase', methods=['POST'])
def searchCase():
    data_dict = json.loads(request.get_data(as_text=True))
    if not data_dict:
        return jsonify({'code': '', 'message': "未收到参数", 'success': False, 'data': None})
    case_name = data_dict['caseName']
    try:
        # 应用模糊搜索，参数空字符串即为查询全部
        results = db.session.query(MelonCase).filter(MelonCase.case_name.like('%{}%'.format(case_name)),
                                                     MelonCase.yn == 1).order_by(MelonCase.update_time.desc()).all()
        records = []
        for result in results:
            # todo 这里需要优化
            records.append({'dt': result.dt, 'caseId': result.case_id, 'caseName': result.case_name,
                            'caseInput': result.case_input, 'caseOutputExpected': result.case_output_expected,
                            'caseOutputReal': result.case_output_real, 'caseIsSuccess': result.is_pass})

        return jsonify({'code': '', 'message': '数据查询成功', 'success': True, 'data': records})
    except Exception as e:
        log.error(e)
        return jsonify({'code': -1, 'message': '服务端异常', 'success': False, 'data': None})


@blueprint.route('/api/melon/deleteCase', methods=['POST'])
def deleteCase():
    data_dict = json.loads(request.get_data(as_text=True))
    if not data_dict:
        return jsonify({'code': '', 'message': "未收到参数", 'success': False, 'data': None})
    now_time = utils.get_YmdHMS()
    row_data = db.session.query(MelonCase).filter(MelonCase.case_id.in_(data_dict)).update({MelonCase.yn: '0', MelonCase.update_time: now_time})
    if row_data:
        db.session.commit()

    return jsonify({'code': '', 'message': '删除成功', 'success': True, 'data': None})
